package interfacegrafica;

import codigo.*;
import java.util.*;
import javax.swing.*;

public class jFcadastraComandaProduto extends javax.swing.JFrame {

    public jFcadastraComandaProduto(jFcadastraComanda j) {
        this.jFrame_anterior = j;
        initComponents();
        setLocationRelativeTo(null);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Adicionar produto a comanda");
        setResizable(false);

        jLabel2.setText("Quantidade:");

        jTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1ActionPerformed(evt);
            }
        });

        jButton2.setText("Salvar");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });

        jButton3.setText("Sair");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });

        jLabel1.setText("Código do produto:");

        jButton1.setText("Adicionar produto");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 62, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(jPanel1Layout.createSequentialGroup()
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel2))
                    .addGap(18, 18, 18)
                    .addComponent(jButton2)
                    .addGap(19, 19, 19)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jButton3))))
            .addComponent(jLabel1)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(27, 27, 27)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(23, 23, 23)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jButton3)
                    .addComponent(jButton2))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(13, Short.MAX_VALUE)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField1ActionPerformed
        
    }//GEN-LAST:event_jTextField1ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed

        //Verifica se os campos estão preenchidos
        if (jTextField1.getText().equals("") || jTextField2.getText().equals("")) {
            JOptionPane.showMessageDialog(jFcadastraComandaProduto.this, "Preencha os campos!", "Erro", JOptionPane.ERROR_MESSAGE);
        } else {

            Boolean achou = false;
            Produto Produto_temporario = new Produto();

            //Varre a linkedList de protudos em busca do produto com ID do textField
            for (Produto p : jFmenu.retornaProdutos()) {

                //Verifca se achou um produto com ID igual
                //Verifica se os campos foram preenchidos devidamente
                try {
                    if (Integer.parseInt(jTextField1.getText()) <= 0 || (Integer.parseInt(jTextField2.getText()) <=0 )) {
                            JOptionPane.showMessageDialog(null, "Digite um valor válido!", "Entrada inválida", JOptionPane.ERROR_MESSAGE);
                            jTextField1.setText("");
                            jTextField2.setText("");
                            return;
                        }
                    if (p.getCodigo() == Integer.parseInt(jTextField1.getText())) {
                        achou = true;
                        //Pega o objeto produto
                        Produto_temporario = p;
                        break;
                    }
                } catch (NumberFormatException n) {
                    JOptionPane.showMessageDialog(null, "Digite um valor válido!", "Entrada inválida", JOptionPane.ERROR_MESSAGE);
                    jTextField1.setText("");
                    return;
                }


            }

            //Se achou um produto com ID informado pelo usuário
            if (achou) {
                //Adiciona um produto a uma LinkedList de produtos temporarios
                temporaria_produtos.add(Produto_temporario);
                //Adiciona a quantidade do produto a uma LinkedList de quantidades temporarias
                temporaria_quantidade.add(Integer.parseInt(jTextField2.getText()));
                //Limpa os campos                
                jTextField1.setText("");
                jTextField2.setText("");
                //Mensagem de confirmação
                JOptionPane.showMessageDialog(jFcadastraComandaProduto.this, "Produto adicionado a comanda com sucesso!", "Sucesso", JOptionPane.INFORMATION_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(jFcadastraComandaProduto.this, "Produto não encontrado!", "Erro", JOptionPane.ERROR_MESSAGE);
            }

        }


    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed

        Calendar temp = Calendar.getInstance();
        String data = "" + temp.get(Calendar.DAY_OF_MONTH) + "/" + (temp.get(Calendar.MONTH) + 1) + "/" + temp.get(Calendar.YEAR);

        int indice = 0;
        boolean achou1 = false;
        boolean achou2 = false;
        //Varre a LinkedList de Caixa em busca de um caixa aberto no dia corrente
        for (Caixa d : jFmenu.retornaCaixas()) {

            //Verifica se já existe um caixa aberto com a data do dia corrente
            if (d.getData().equals(data)) {
                achou1 = true;
                break;
            }

            //Recebe o indice onde o objeto caixa com data corrente está armazenado na LinkedList caixas
            indice++;

        }

        //Se achou o caixa na data de hoje, entra aqui
        if (achou1) {

            //Varre a linkedlist de comandas dentro da linkedlist de caixas do dia corrente            
            for (Comanda c : jFmenu.retornaComanda(indice)) {

                //Verifica a compatibilidade da comanda temporaria com a comanda final
                if (c.getNumero() == jFcadastraComanda.pegaCodigo()) {
                    //Se achou, seta de verdade a comanda temporaria na comanda final
                    achou2 = true;
                    c.setProdutosEQuantidade(temporaria_quantidade, temporaria_produtos);
                    break;

                }

            }

            if (achou2) {
                //Exibe na tela o sucesso da operação
                JOptionPane.showMessageDialog(jFcadastraComandaProduto.this, "Comanda cadastrada com sucesso!\n\nID da comanda: " + jFcadastraComanda.pegaCodigo(), "Ok", JOptionPane.INFORMATION_MESSAGE);
                jFcadastraComandaProduto.this.setVisible(false);
                jFrame_anterior.setVisible(false);
                //Else para o caso de não achar a compatibilidade das comandas    
            } else {
                JOptionPane.showMessageDialog(jFcadastraComandaProduto.this, "Erro! Tente novamente", "Erro", JOptionPane.ERROR_MESSAGE);
                jFcadastraComandaProduto.this.setVisible(false);
            }



            //Else para o caso de não achar o caixa do dia corrente    
        } else {

            JOptionPane.showMessageDialog(jFcadastraComandaProduto.this, "Erro! Tente novamente", "Erro", JOptionPane.ERROR_MESSAGE);
            jFcadastraComandaProduto.this.setVisible(false);

        }

    }//GEN-LAST:event_jButton2ActionPerformed

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed

        jFcadastraComandaProduto.this.setVisible(false);

    }//GEN-LAST:event_jButton3ActionPerformed

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                jFcadastraComanda c = new jFcadastraComanda();
                new jFcadastraComandaProduto(c).setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration//GEN-END:variables
    //LinkedLists auxiliares para gravar produtos e quantidades enquanto o usuário não grava de fato a comanda
    LinkedList<Produto> temporaria_produtos = new LinkedList<Produto>();
    LinkedList<Integer> temporaria_quantidade = new LinkedList<Integer>();
    jFcadastraComanda jFrame_anterior;
}
